/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.restaumanager.service;

import com.restaumanager.api.IFiltreForm;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author CYRIL
 */
public interface IService<T, PK extends java.io.Serializable> {

    public T ajouter(T t);

    public T modifier(T t);

    public boolean supprimer(PK k);

    public boolean supprimer(T t);

    public T selectionner(PK k);

    public List<T> lister();

    public List<T> lister(String tri, boolean asc);

    public List<T> lister(String tri);

    public List<T> lister(int debut, int nombre, String tri, boolean asc);

//    public List<T> lister(int debut, int nombre, String tri, boolean asc, CriteriaQuery<T> c, Root<T> t);

    public List<T> lister(int debut, int nombre, IFiltreForm q);
    
    public List<T> lister(IFiltreForm q, String sortAttrib, String sortDir);
    
//    public List<T> lister(IFiltreForm filtreForm);

    public Long nombreEnreg();

    public Long nombreEnreg(IFiltreForm q);

    public void supprimer(PK[] pks);
        
    /**
     * Supprime les instances dans la collections.
     *
     * @param ts
     */
    public void supprimer(Collection<T> ts);

    /**
     * Supprime les instances dans l'itérator.
     *
     * @param ts
     */
    public void supprimer(Iterator<T> ts);

    /**
     * Persiste les instances de la collection.
     *
     * @param ts
     * @return Collection<T>
     */
    public Collection<T> ajouter(Collection<T> ts);

    /**
     * Persiste les instances de l'itérator.
     *
     * @param ts
     * @return Collection<T>
     */
    public Collection<T> ajouter(Iterator<T> ts);

    /**
     * Modifie les instances de la collection.
     *
     * @param ts
     * @return Collection<T>
     */
    public Collection<T> modifier(Collection<T> ts);

    /**
     * Modifie les instances de l'itérator.
     *
     * @param ts
     * @return Collection<T>
     */
    public Collection<T> modifier(Iterator<T> ts);

    public void supprimer();

    /**
     * Vérifie si l'instance d'identifiant k existe.
     *
     * @param k
     * @return Retourne vrai si l'élément est retrouvé, faux sinon
     */
    public boolean exist(PK k);

    public Query creerQuery(String requete); 
        
    List<T> lister(int debut, int nombre, String tri, boolean asc, IFiltreForm filtre);
    
    public List<T> lister(IFiltreForm q);
}
